#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn=40;
int a[maxn];
int tot=0;
int dp[maxn][10];///一共pos位且上一位为j的方案数量
// ...
int dfs(int pos,int pre,bool lead,bool limit)
{
    if(pos==0) return 1;///搜到了结尾
    if(!limit&&dp[pos][pre]!=-1) return dp[pos][pre];//如果不是带有限制的情况并且上一位是pre的情况已经搜完了，直接获得
    int res=0;
    int bound=9;
    if(limit==1) bound=a[pos];
    for(int i=0;i<=bound;i++){
        //有前导0并且当前位也是前导0
        if((!i)&&lead){
            res+=dfs(pos-1,i,1,i==bound&&limit);
        }
        //有前导0但当前位不是前导零，当前位就是最高位
        else if(i&&lead){
            res+=dfs(pos-1,i,0,i==bound&&limit);
        }
        else if(abs(pre-i)>=2){
            res+=dfs(pos-1,i,0,i==bound&&limit);
        }
    }
    if(!limit&&!lead) dp[pos][pre]=res;
    return res;
}
inline int solve(int num)
{
    tot=0;
    memset(a,0,sizeof(a));
    while(num>0){
        a[++tot]=num%10;num/=10;
    }
    memset(dp,-1,sizeof(dp));
    int res=dfs(tot,0,1,1);
    return res;
}
int main()
{
    int l,r;cin>>l>>r;
    cout<<solve(r)-solve(l-1)<<endl;
}
